package boxrenderer; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.io.Writer; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; public class XmlUtils { public static Document parse(File file) throws SAXException, IOException, ParserConfigurationException { return getDocumentBuilder().parse(file); } public static Document parse(InputSource source) throws ParserConfigurationException, SAXException, IOException { return getDocumentBuilder().parse(source); } public static Document newDocument() throws ParserConfigurationException { return getDocumentBuilder().newDocument(); } public static DocumentBuilder getDocumentBuilder() throws ParserConfigurationException { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); dbFactory.setNamespaceAware(true); return dbFactory.newDocumentBuilder(); } public static String serialize(Node doc) throws Exception { StringWriter outText = new StringWriter(); serialize(new DOMSource(doc), outText); return outText.toString(); } public static void serialize(Source source, Writer writer) throws Exception { serialize(source, writer, ImmutableMap.of(OutputKeys.ENCODING, "UTF-8", OutputKeys.INDENT, "yes")); } public static void serialize(Source source, Writer writer, Map<String, String> properties) throws Exception { StreamResult sr = new StreamResult(writer); TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = null; t = tf.newTransformer(); for(Map.Entry<String, String> me : properties.entrySet()) { t.setOutputProperty(me.getKey(), me.getValue()); } t.transform(source,sr); } public static NodeList evalXpath(String xpath, Object item) throws XPathExpressionException { XPath xp = XPathFactory.newInstance().newXPath(); XPathExpression expr = xp.compile(xpath); return (NodeList)expr.evaluate(item, XPathConstants.NODESET); } public static Map<String, String> getAttributes(Node node) { NamedNodeMap map = node.getAttributes(); Map<String, String> result = Maps.newHashMap(); if(map!=null) { for (int i=0; i<map.getLength();i++) { result.put(map.item(i).getNodeName(), map.item(i).getNodeValue()); } } return result; } public static Document xslt(InputStream stylesheet, Document input) throws FileNotFoundException, TransformerException, ParserConfigurationException { TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(new StreamSource(stylesheet)); Document result = newDocument(); DOMResult domResult = new DOMResult(result); transformer.transform(new DOMSource(input), domResult); return result; } }